package com.hhf.feioj.judge.codesandbox.proxy;

import com.hhf.feioj.judge.codesandbox.CodeSandbox;
import com.hhf.feioj.judge.codesandbox.model.ExecuteCodeResponse;
import lombok.extern.slf4j.Slf4j;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * @Author hhf
 * @Date 2024/10/27
 * @Description 动态代理:方便工厂类动态生成实例
 * 步骤: 1.实现 InvocationHandler 的方法 invoke()
 *      2.在需要的地方使用 Proxy.newProxyInstance()生成代理对象
 */
@Slf4j
public class CodeSandboxDynamicProxy implements InvocationHandler {

    private CodeSandbox codeSandbox;

    public CodeSandboxDynamicProxy(CodeSandbox codeSandbox){
        this.codeSandbox = codeSandbox;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        log.info("动态代理开启,正在记录日志...\n方法名称{}",method.getName());
        Object result = method.invoke(codeSandbox, args);
        log.info("方法执行完成,结束动态代理...");

        return result;
    }

}
